<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      /* 字符串的长度 */
      // var str = "jack"
      // console.log(str.length);

      function demoIndexOf() {
        const str = "A dog barks. The dog barked, was it really lazy?";

        const firstIndex = str.indexOf("dog");
        console.log(firstIndex); //dog首次出现的下标2

        // 搜索piggy首次出现的下标
        console.log(str.indexOf("piggy")); //piggy首次出现的下标-1 该子串并不存在

        // 查询dog第二次出现的下标
        // var secondIndex = str.indexOf("dog", (firstIndex+1))//
        var secondIndex = str.indexOf("dog", 3); //从3号位开始检索
        console.log(secondIndex); //17
      }
      //   demoIndexOf()

      /* 查询子串最后一次出现的下标 */
      function demoLastIndexOf() {
        var str = "brave new world is brave or not?";

        // 子串brave最后一次出现的下标
        console.log(str.lastIndexOf("brave")); //19

        // 从18号位向左回找最后一个brave出现的下标
        // 这一招没什么太大的卵用，只是为了让大家查文档
        console.log(str.lastIndexOf("brave", 18)); //0
      }
      //   demoLastIndexOf()

      /* 检测str中是否包含子串 返回true或false */
      function demoIncludes() {
        var str = "To be, or not to be, that is the question.";

        console.log(str.includes("To be")); // true
        console.log(str.includes("question")); // true
        console.log(str.includes("nonexistent")); // false
        console.log(str.includes("To be", 1)); // false
        console.log(str.includes("TO BE")); // false
      }

      /* 替换子串 */
      function demoReplace() {
        const str =
          "The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?";
        var newStr = str.replace("dog", "monkey");
        console.log(newStr);

        // 将所有的dog替换为piggy
        console.log(str.replaceAll("dog", "piggy"));
      }
      //   demoReplace()

      /* 截取子串 */
      function demoSubstring() {
        var str = "Mozilla";

        // 截取范围[0,3) 含头不含尾/左闭右开
        console.log(str.substring(0, 3)); //Moz
      }

      function demoSlice() {
        const str = "The quick brown fox jumps over the lazy dog.";

        // 从31位截取到末尾
        console.log(str.slice(31));
        // expected output: "the lazy dog."

        // 截取范围[4,18]
        console.log(str.slice(4, 19));
        // expected output: "quick brown fox"

        // 从倒数第4位一直截取到末尾
        console.log(str.slice(-4));
        // expected output: "dog."

        // 从倒数第9位一直截取到倒数第6位、
        // The quick brown fox jumps over the 【lazy】 dog.
        console.log(str.slice(-9, -5));
        // expected output: "lazy"
      }

      /* 肢解字符串为子串的数组 */
      function demoSplit() {
        const str = "The quick brown fox jumps over the lazy dog.";

        // 以“ ”为分隔符 将字符串炸碎为子串数组
        // var arr = str.split(" ");

        // 以空字符串为分隔符 将字符串炸碎为子串数组(所有字符形成的子串数组)
        // var arr = str.split("");

        // 肢解形成一个以str为唯一元素的数组
        // var arr = str.split();

        // 炸碎后 得到前三个元素形成的数组
        var arr = str.split(" ", 3);
        console.log(arr);
      }
      //   demoSplit()

      /* 转大写/小写 */
      function demoToUpperLowerCase() {
        console.log("中文简体 zh-CN || zh-Hans".toLowerCase());
        // 中文简体 zh-cn || zh-hans

        console.log("中文简体 zh-CN || zh-Hans".toUpperCase());
      }
      //   demoToUpperLowerCase()

      /* 
      裁掉头尾空格 
      空白字符：空格 \t \n
      */
      function demoTrim() {
        const str = "   Hello world!   ";
        console.log(str.trim());
        console.log(str.trimStart());
        console.log(str.trimEnd());
      }
      //   demoTrim()

      /* 判断str是否以特定子串开头/结尾 */
      function demoStartsEndsWith() {
        var str = "jack is a good boy";
        console.log(str.startsWith("jack")); //true
        console.log(str.endsWith("jack")); //false
      }
      // demoStartsEndsWith()

      /* 使用自定义的规则 将旧字符串替换为新字符串 */
      function demoReplaceWithFunction() {
        // 将脏话替换成等字符的*
        var str = "令妹啊，姐三个月没来大姨妈了，愁死老娘了，shit,真是坑爹啊，令妹！";

        // var dirtyWords = [
        //     "令妹",
        //     "shit",
        // ]

        console.log(str.replace("令妹","**"));
        var newStr = str.replace(
            "令妹",//旧字符串

            // 旧字符串替换规则
            // 发现旧字符串时回调该函数 将旧字符串作为old入参 以返回值为新字符串去替换old
            function(old){
                console.log("发现子串",old);//令妹

                /* 创建于old等长的*字符串 */
                var newStr = ''
                for(var i=0;i<old.length;i++){
                    newStr += "*"
                }

                // 返回新字符串去替换旧字符串
                return newStr
            }
        )
        console.log(newStr);
      }
    //   demoReplaceWithFunction();
    </script>
  </body>
</html>
